// :2024/4/5 15:58
// :pengyaqin
package main

import (
	"bufio"
	"encoding/json"
	"fmt"
	"os"
	"strings"
)

func main() {
	users := make(map[string]map[string]string) //用make函数给users初始化一个空间
	// 尝试从文件中读取用户数据
	userStr, err := os.ReadFile("users.json")
	if err == nil {
		// 将读取的字节解析为 JSON，并转换为嵌套 map
		err = json.Unmarshal(userStr, &users)
		if err == nil {
			fmt.Println("用户数据加载成功")
		} else {
			fmt.Println("转换 JSON 出错:", err)
		}
	}
	for {
		reader := bufio.NewReader(os.Stdin)
		fmt.Print("请输入你的选择（1:注册，2:登录，3:退出）:")
		n, _ := reader.ReadString('\n')
		n = strings.TrimSpace(n)
		if n != "1" && n != "2" && n != "3" {
			fmt.Println("输入无效")
		}
		if n == "1" {
			fmt.Println("注册功能")
			fmt.Print("请输入用户名: ")
			username, _ := reader.ReadString('\n')
			username = strings.TrimSpace(username)
			if _, exists := users[username]; exists {
				fmt.Println("用户已存在")
				continue
			}
			fmt.Print("请输入密码: ")
			passwd, _ := reader.ReadString('\n')
			passwd = strings.TrimSpace(passwd)
			fmt.Print("请输入年龄: ")
			age, _ := reader.ReadString('\n')
			age = strings.TrimSpace(age)
			fmt.Print("请输入性别(male/female): ")
			sex, _ := reader.ReadString('\n')
			sex = strings.TrimSpace(sex)
			user := make(map[string]string) //用make函数给user初始化一个空间，以便存放
			user["Passwd"] = passwd
			user["Age"] = age
			user["Sex"] = sex
			users[username] = user //username作为key user作为value
			//fmt.Println(users)
			fmt.Println("注册成功")
		}
		if n == "2" {
			fmt.Println("登录功能")
			fmt.Print("请输入用户名: ")
			username, _ := reader.ReadString('\n')
			username = strings.TrimSpace(username)
			fmt.Print("请输入密码: ")
			passwd, _ := reader.ReadString('\n')
			passwd = strings.TrimSpace(passwd)
			if user, exists := users[username]; exists && user["Passwd"] == passwd {
				fmt.Println("登录成功")
			} else if user, exists = users[username]; exists && user["Passwd"] != passwd {
				fmt.Println("密码错误，登录失败")
			} else {
				fmt.Println("登录失败")
			}
		}
		if n == "3" {
			break
		}
		userStr, _ := json.Marshal(users) //将map转换成json格式的字节存入到users.json文件中
		err := os.WriteFile("users.json", userStr, 0666)//权限666是读写组、用户、其他
		if err != nil {
			return
		}

	}
	fmt.Println("退出系统")
}
